package com.yl.pattern.creatormodel.singleton.demo4;

/**
 * @Author 小羊
 * @Date 29/10/2024下午 6:32
 * @ClassName Singleton
 * @Description 双重检查锁
 */
public class Singleton {
    /**
     * 私有构造方法
     */
    private Singleton(){}
    /**
     * 声明单例变量
     */
    private volatile static Singleton instance;

    /**
     * 提供一个公共的访问方式，让外界获取该对象（线程安全）
     */
    public static synchronized Singleton getInstance(){
        //第一次判断,如果instance的值不为null，不需要抢占锁，直接返回对象
        if(instance==null){
            synchronized (Singleton.class){
                //第二次判断
                if(instance==null){
                    instance=new Singleton();
                }
            }
        }
        return instance;
    }
}
